14.2.1 简单应用

本章后续的内容会一直使用示例应用 AtSea Shop 。该示例托管在Github的 dockersamples/atsea-sample-shop-app 库中,基于Apache 2.0许可证开源。

使用该应用是因为其复杂度适中,不会因为太复杂而难以完整解释。除此之外,该应用还是个多服务应用,并且利用了认证和安全相关的技术。应用架构如图14.2所示。

如图所示,该应用由5个服务、3个网络、4个密钥以及3组端口映射构成。具体细节将会结合Stack文件进行分析。

注:

在本章中用到服务一词时,指的是Docker服务(由若干容器组成的集合,作为一个整体进行统一管理,并且在Docker API中存在对应的服务对象)。

88.png

图14.2 AtSea商店架构图

复制Github仓库,以获取全部源代码文件。

$ git clone https://github.com/dockersamples/atsea-sample-shop-app.git Cloning
into 'atsea-sample-shop-app'...
remote: Counting objects: 636, done.
remote: Total 636 (delta 0), reused 0 (delta 0), pack-reused 636
Receiving objects: 100% (636/636), 7.23 MiB | 28.25 MiB/s, done.
Resolving deltas: 100% (197/197), done.

该应用的代码由若干目录和源码文件组成。读者可以随意浏览这些文件。但是接下来,重点关注的文件是 docker-stack.yml 。该文件通常被称为Stack文件,在该文件中定义了应用及其依赖。

在该文件整体结构中,定义了4种顶级关键字。

version:
services:
networks:
secrets:

version 代表了Compose文件格式的版本号。为了应用于Stack,需要3.0或者更高的版本。 services 中定义了组成当前应用的服务都有哪些。 networks 列出了必需的网络, secrets 定义了应用用到的密钥。

如果展开顶级的关键字,可以看到类似图14.2中的结构。Stack文件由5个服务构成,分别为“reverse_proxy”“database”“appserver”“visualizer”“payment_gateway”。Stack文件中包含3个网络,分别为“front-tier”“back-tier”“payment”。最后,Stack文件中有4个密钥,分别为“postgres_password”“staging_token”“revprox_key”“revprox_cert”。

version: "3.2"
services:
    reverse_proxy:
    database:
    appserver:
    visualizer:
    payment_gateway:
networks:
    front-tier:
    back-tier:
    payment:
secrets:
    postgres_password:
    staging_token:
    revprox_key:
    revprox_cert:

Stack文件定义了应用的很多依赖要素,理解这一点很重要。因此,Stack文件是应用的一个自描述文件,并且作为一个很好的工具弥合了开发和运维之间的隔阂。

接下来一起深入分析Stack文件的细节。

results matching ""

    No results matching ""